package com.atguigu.web;

import com.atguigu.Bean.C_book;
import com.atguigu.Bean.C_page;
import com.atguigu.service.BookService;
import com.atguigu.service.impl.BookServiceImpl;
import com.atguigu.utils.WebUtils;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class ClientBookServlet extends BaseServlet{
    BookService bs=new BookServiceImpl();
    /**
     * 处理分页功能
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void page(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1、获取请求的参数 pageNo和pageSize。
        int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 1);
        int pageSize = WebUtils.parseInt(req.getParameter("pageSize"), C_page.PAGE_SIZE);
//        2、调用BookService.page(pageNo,pageSize)返回Page对象
        C_page<C_book> page = bs.page(pageNo, pageSize);
//        2.5、设置翻页操作所用的请求地址
        page.setUrl("client/bs?action=page");
//        3、保存到Request域中
        req.setAttribute("page",page);
//        4、请求转发到/pages/ManagerPages/c_game_books_manager.jsp
        req.getRequestDispatcher("/pages/UserPages/c_game_books.jsp").forward(req,resp);
    }
    /**
     * 根据价格区间处理分页功能
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void pageByPrice(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1、获取请求的参数 pageNo和pageSize和min和max。
        int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 1);
        int pageSize = WebUtils.parseInt(req.getParameter("pageSize"), C_page.PAGE_SIZE);
        int min = WebUtils.parseInt(req.getParameter("min"), 0);
        int max = WebUtils.parseInt(req.getParameter("max"), 999999);
//        2、调用BookService.pageByPrice(pageNo, pageSize,min,max);返回Page对象
        C_page<C_book> page = bs.pageByPrice(pageNo, pageSize,min,max);
//        2.5、设置翻页操作所用的请求地址
        StringBuilder sb=new StringBuilder("client/bs?action=page");
        /*
        一个可变的字符序列。 此类提供与StringBuffer的API，但不保证同步。
        此类设计用作简易替换为StringBuffer在正在使用由单个线程字符串
        缓冲区的地方（如通常是这种情况）。 在可能的情况下，建议使用这个
        类别优先于StringBuffer ，因为它在大多数实现中将更快。
        */
        if(WebUtils.parseInt(req.getParameter("min"), 0)!=0||WebUtils.parseInt(req.getParameter("max"), 999999)!=999999){
            sb.append("ByPrice&min="+req.getParameter("min")+"&max="+req.getParameter("max"));
        }
        //先判断当前是否使用了价格区间功能，使用了就用带价格区间的查询操作，未使用就用普通查询操作
        //相当于是利用了两个查询方法名之间相似度的小优势
        //地址中，可以使得上一步写过的max,min参数维持原样
        page.setUrl(sb.toString());
//        3、保存到Request域中
        req.setAttribute("page",page);
//        4、请求转发到/pages/ManagerPages/c_game_books_manager.jsp
        req.getRequestDispatcher("/pages/UserPages/c_game_books.jsp").forward(req,resp);
    }
}
